package com.fauks.ssm.springmvc.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

//登录拦截器
public class LoginInterceptor implements HandlerInterceptor {

    /*
     * 在处理器执行之间执行，返回值为true接着执行处理器方法，然后将afterCompletion放在方法栈等待执行
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        String name = (String) session.getAttribute("name");
        if (!"fauks".equals(name)) {
            //没有登录，权限验证失败
            request.getRequestDispatcher("/fail.jsp").forward(request, response);
            return false;
        }
        return true;
    }

    /*
     * 在处理器器执行完毕执行，如果处理器方法未执行则该方法不执行，可以修改ModelAndView的结果集与页面跳转
     * */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandler");

    }

    /*
     *  1.preHandle返回true时，等到对请求的进行响应的所有工作完成之后才执行该方法
     *   该方法是在中央调度器渲染、填充数据了响应页面之后执行，此时操作ModelAndView没有任何效果
     *   无论handler是否发生异常都会执行该方法，所以一般用于资源回收工作
     * */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion");

    }
}
